DA 컨버터 사용팁

MCU 보드내에 DA컨버터가 있을 경우, 사용자는 DSP프로그램의 변수값을 DA컨버터를 통해 출력함으로써 오실로스코프와 같은 계측기로 관찰할 수 있습니다.
easyDSP를 사용하므로써 DA컨버터의 출력 내용(즉, 변수)을 온라인으로 용이하게 변경하는 방법을 설명합니다.

Step 1 : da.h파일의 수정

easyDSP는 DA컨버터의 제어를 위해 2개의 MCU 프로그램 파일(da.c, da.h)을 제공합니다. 우선 da.h를 살펴보면 다음과 같습니다.

// File name : da.c
// function : DA output control

// variable explanation(#=1,2,3,4)
// da# : address of variable
// da#_type = 0 ; the variable is float
// = 1 ; the variable is integer
// da#_mid : mid value
// da#_rng : da scale

// use this routine in EasyDSP as below
// da1=&var_float
// da1_type=0
// da1_mid=0.
// da1_rng=20
// da2 = &var_int
// da2_type = 1
// da2_mid= 0.
// da2_rng = 20

#ifndef _DA_EasyDSP
#define _DA_EasyDSP

// you should specify the da address of your own
#define DA1_ADDR (*(int *)0X03C000e)
#define DA2_ADDR (*(int *)0X03C000d)
#define DA3_ADDR (*(int *)0X03C000b)
#define DA4_ADDR (*(int *)0X03C0007)
#define

extern unsigned int da1, da2, da3, da4, da1_type, da2_type, da3_type, da4_type;
extern float da1_rng, da1_val, da1_mid;
extern float da2_rng, da2_val, da2_mid;
extern float da3_rng, da3_val, da3_mid;
extern float da4_rng, da4_val, da4_mid;

// 12 bit DA
#define DA12(num) \
da##num##_val = (da##num##_type == 0 ? *(float *)da##num : (float)(*(int *)da##num)) ; \
DA##num##_ADDR = (int)((da##num##_val-da##num##_mid )* 0x7ff/da##num##_rng) + 0x800 ;

// 8 bit DA
#define DA8(num) \
da##num##_val = (da##num##_type == 0 ? *(float *)da##num : (float)(*(int *)da##num)) ; \
DA##num##_ADDR = (int)((da##num##_val-da##num##_mid )*0x7f/da##num##_rng) + 0x80 ;


#endif

우선 DA#_ADDR 정의 구문에서 당신의 DSP보드의 DA 번지를 설정하십시요(#= 1,2,3,4).그 후, 당신의 DA컨버터에 따라 적절한 DA출력용 매크로 함수를 정의합니다. < BR> 위 코드에서는 8bit 또는 12bit 양방향(+/-) DA컨버터의 예제를 표시합니다. 각 변수는 da.c파일에 정의되어 있으며 그 의미를 살펴보면 다음과 같습니다.
da# = DA 채널 #의 값. 즉, DA출력을 하고자하는 변수의 번지
da#_type = da#에서 번지값이 설정된 변수의 타입. 정수일 경우 1, 실수일 경우 0
da#_rng = 표시값의 범위
da#_mid = 표시값의 중간값
da#_val = 채널#에 라이트할 값

Step 2 : MCU 프로그램 수정

우선 da.c의 컴파일한 파일인 da.obj를 linker에 추가하여 MCU 프로그램을 생성합니다. 그 후, DA출력을 원하는 파일의 첫부분에 da.h를 include한 후, DA출력을 원하는 위치에 다음과 같이 da.h에서 정의된 DA출력용 매크로 함수를 적습니다.

#include "da.h"

..........

DA12(1);
DA12(2);
DA12(3);
DA12(4);
.......

 

Step 3 : easyDSP 사용

easyDSP내의 커맨드 윈도우내에서 다음과 같은 형식으로 DA출력을 제어할 수 있습니다.

da1=&var_float
da1_type=0
da1_mid=0
da1_rng=20
da2 = &var_int
da2_type = 1
da2_mid= 0
da2_rng = 20

주의점 : DA출력을 위한 매크로중 나누기 연산은 수행시간을 저하시킵니다. 따라서 고속의 DA출력을 원할 경우, 나누기 연산 부분을 적절한 곱셈으로 대치하여 사용하세요.